package com.hjr.leetcode.question100;

import java.util.Stack;

/**
 9. 回文数
 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。

 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。

 例如，121 是回文，而 123 不是。
 */
public class q9 {

    public static void main(String[] args) {
        //一眼栈结构 错误的，如果121中间值没有办法判断
        //改为双指针 也不可行，除非转为字符串
        //手动逻辑判断
        System.out.println(isPalindrome(1221));
    }

    // 4ms 43mb
    public static boolean isPalindrome(int x) {
        //负数一定不为回文数，如果或者末尾为0（除了0），则一定不为回文数
        if (x < 0 || (x % 10 == 0 && x != 0)){
            return false;
        }

        //将末尾数赋值给revertedNumber,条件为x > revertedNumber
        //当 x <= revertedNumber时，说明revertedNumber的长度已经超过了x拿到了x的一半数字
        int revertedNumber = 0;
        while (x > revertedNumber){
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }

        //当x的长度比revertedNumber的长度长时，说明x的长度是奇数，revertedNumber的长度是偶数
        //此时x的末尾数一定和revertedNumber的末尾数相等，所以只需要判断x的前半部分是否和revertedNumber的前半部分相等
        //如果x的长度是偶数，则x的末尾数一定和revertedNumber的末尾数相等，所以只需要判断x的前半部分是否和revertedNumber的前半部分相等
        return x == revertedNumber || x == revertedNumber / 10;
    }

}
